// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck
import { UserConfig, ConfigEnv, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';
import path from 'path';
import { visualizer } from 'rollup-plugin-visualizer';
import DefineOptions from 'unplugin-vue-define-options/vite';
import AutoImport from 'unplugin-auto-import/vite';
import Components from 'unplugin-vue-components/vite';
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons';
import UnoCSS from 'unocss/vite';
import viteCompression from 'vite-plugin-compression';
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export default ({ _command, mode }: ConfigEnv): UserConfig => {
  // 获取 .env 环境配置文件
  const env = loadEnv(mode, process.cwd());
  return {
    plugins: [
      vue(),
      // 包体资源分析工具
      visualizer({ open: true }),
      // elementPlus组件的按需引入
      AutoImport({
        resolvers: [ElementPlusResolver()],
      }),
      Components({
        resolvers: [ElementPlusResolver()],
      }),
      // 允许setup语法糖在script标签中通过name属性定义组件名称
      DefineOptions(),
      // 使用svg图标支持
      createSvgIconsPlugin({
        // 指定需要缓存的图标文件夹
        iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
        // 指定symbolId格式
        symbolId: 'icon-[dir]-[name]',
      }),
      //原子化css
      UnoCSS({}),
      // 开启gzip
      viteCompression(),
    ],
    // 本地反向代理解决浏览器跨域限制
    server: {
      // 启动是否自动打开浏览器
      open: true,
      // 允许跨域
      cors: true,
      //端口号
      port: 8080,
      host: '0.0.0.0',
      proxy: {
        // 代理工作关键字
        [env.VITE_APP_BASE_API]: {
          // 目标服务器地址，读取至本地配置文件
          target: env.VITE_SERVE,
          changeOrigin: true,
          rewrite: (path) =>
            //路径重写
            path.replace(new RegExp('^' + env.VITE_APP_BASE_API), ''),
          // 查看代理后的服务器路径-仅在开发环境有效，确保代理正确
          bypass(req, res, option) {
            const proxyUrl =
              new URL(option.rewrite(req.url) || '', option.target as string)
                ?.href || '';
            req.headers['req-proxyUrl'] = proxyUrl;
            res.setHeader('res-proxyUrl', proxyUrl);
          },
        },
      },
    },
    resolve: {
      alias: {
        // 相对路径别名配置，使用 @ 代替 src
        '@': path.resolve('./src'),
      },
    },
    css: {
      // 预处理器配置
      preprocessorOptions: {
        // scss 配置
        scss: {
          // 允许在scss中使用js代码
          javascriptEnabled: true,
          // 定义全局都可以访问到的scss文件
          additionalData: '@import "./src/styles/variable.scss";',
        },
      },
    },
  };
};
